#linspace()生成等差数列
#np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)
#start：数列的开始值 必填
#stop：数列的结束值 必填
#num：生成数列的个数 默认50
#endpoint：是否包含结束值 默认为True
#retstep：是否返回步长 默认为False 如果是True则返回一个元组(a,b) a是数组 b是步长
#dtype：指定生成的数组的数据类型

import numpy as np
a = np.linspace(0,10,5)
print(a)    #[ 0.  2.5  5.  7.5 10.]

a = np.linspace(0,10,5,endpoint=False)
print(a)    #[ 0.  2.5  5.  7.5]

a = np.linspace(0,10,5,retstep=True)
print(a)    #(array([ 0. ,  2.5,  5. ,  7.5, 10. ]), 2.5)

a = np.linspace(0,10,5,dtype=np.int64)
print(a)    #[0 2 5 7 10]

print("实例：-------------------------------------------------")
#实例一：想得到一个长度为10的、从0.1开始的、间隔为0.1的数组
a = np.linspace(0.1,1,10)
print(a)    #[0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9  1. ]

#实例二：生成x_data,值为[1,100]之间500个等差数列数据集合作为样本特征，根据目标现行方程y=3*x+2,生成样本标签集合y_data
x_data = np.linspace(0,100,5,dtype=np.int64)
y_data = 3*x_data+2
print(x_data)
print(y_data)

print("------------------------------------------------------")

#logspace()生成等比数列
#np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)
#start：数列的开始值 必填
#stop：数列的结束值 必填
#num：生成数列的个数 默认50
#endpoint：是否包含结束值 默认为True
#base：数列的log底数 默认为10.0
#dtype：指定生成的数组的数据类型

a = np.logspace(0,9,10,base=2)
print(a)    #[1.  2.  4.  8. 16. 32. 64. 128. 256. 512.]
#np.logspace(A,B,C,base=D)
#A:生成数组的起始值为D的A次方
#B:生成数组的结束值为D的B次方
#C:生成数组的个数
#D:数列的log底数，当省略时默认为10.0

#等同于等差数列取固定底数的指数函数值
a = np.linspace(0,9,10)
b = 2**a
print(b)    #[1.  2.  4.  8. 16. 32. 64. 128. 256. 512.]

a = np.logspace(0,9,10,dtype=int)  #省略base参数,默认值10.0
print(a)    #[1  10  100 1000 10000 100000 1000000 10000000 100000000 1000000000]

print("实例：-------------------------------------------------")
'''
实例：一个穷人到富人那里借钱，原以为富人不愿意，哪知富人一口答应，但条件是：
在30天中，富人第一天借给穷人1万元，第二天借给穷人2万元，以后每天所借的金额都比前天多1万，
但借钱第一天，穷人还1分钱，第二天还2分钱，以后每天所还的金额都是前一天的两倍，
30天后互不相欠。如何用numpy计算结果，决策是否要借钱？

'''
a = np.linspace(1,30,30,dtype=np.int64)
print(a)   #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30]
b = 0
for i in a:
    b = b+i
    i = i+1
print('借款数：',b)   #465

c = np.logspace(0,29,30,base=2,dtype=np.int64)
print(c)  #[1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608 16777216 33554432 67108864 134217728 268435456 536870912]
d = 0
for i in c:
    d = d+i
    i = i+1
print('还款数：',d*0.01)   #等差数列遍历计算结果：10737418.23
print((2**30-1)*0.01)     #等差数列通项公式计算结果：10737418.23
print('借钱’和‘还钱’的差值：',(2**30-1)*0.01-465)   
#结果：10737418.23-465=10696853.23  按上述条件借款465万元，还钱10737418.23万元，差值10696853.23万元，不可借款。


